home *** CD-ROM | disk | FTP | other *** search
- /* memory manager:
- public interface definition
- by Cary Clark, Georgiann Delaney, Michael Fairman, Dave Good, Robert Johnson, Keith McGreggor, Oliver Steele, David Van Brink, Chris Yerga
- Copyright 1987 - 1991 Apple Computer, Inc. All rights reserved. */
-
- #ifndef memoryRoutinesIncludes
- #define memoryRoutinesIncludes
-
- #ifndef memoryTypesIncludes
- #include "memory types.h"
- #endif
- #if defined(appleInternal) && !defined(debugging) && !defined(privateMemMgrIncludes) && !defined(cpuPrinter)
- #include "private memMgr.h"
- #endif
- #ifndef mathTypesIncludes
- #include "math types.h"
- #endif
-
- #ifdef appleInternal
- #if defined(insideLoader) || defined(insideDispatcher)
- #define backpatchMemoryManager
- #else
- #define GXInlineCode(x)
- #endif
- #endif
- #ifndef GXInlineCode
- #ifdef backpatchMemoryManager
- #define GXInlineCode(x) = {0x303C, 0x0800 + (x), 0xA832}
- #else
- #define GXInlineCode(x) = {0x7000 + (x), 0xA832}
- #endif
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- gxHeap *GetCurrentHeap(void) GXInlineCode(0);
- void SetCurrentHeap(const gxHeap *newHeap) GXInlineCode(1);
-
- long GetMinimumHeapSize(void) GXInlineCode(2);
-
- gxHeap *GetFirstHeap(void) GXInlineCode(62);
- gxHeap *GetNextHeap(gxHeap *thisHeap) GXInlineCode(63);
-
- gxHeap *NewHeap(void *memory, long size) GXInlineCode(4);
- long GetHeapSize(const gxHeap *source) GXInlineCode(7);
- long GetHeapFreeSpace(const gxHeap *source) GXInlineCode(66);
- void *CompactHeap(gxHeap *target, void *address) GXInlineCode(8);
- void *GetHeapBlock(gxHeap *source, long types, long index) GXInlineCode(9);
- void DisposeHeap(gxHeap *target) GXInlineCode(10);
-
- void *GetFirstHeapSection(const gxHeap *source, long *length) GXInlineCode(64);
- void *GetNextHeapSection(const gxHeap *source, const void *oldSection, long *length) GXInlineCode(65);
- void GrowHeap(gxHeap *target, void *newMemory, long size) GXInlineCode(5);
- boolean ShrinkHeap(gxHeap *target, void *sectionStart, long sectionLength) GXInlineCode(6);
-
- void *NewDirectBlock(long size) GXInlineCode(11);
- long GetDirectBlockSize(const void *block) GXInlineCode(12);
- void *SetDirectBlockSize(void *block, long newSize) GXInlineCode(13);
- long DisposeDirectBlock(void *block) GXInlineCode(14);
-
- void *NewWeakBlock(long size) GXInlineCode(15);
- void *NewFailBlock(long size) GXInlineCode(16);
- void *SetFailBlockSize(void *block, long newSize) GXInlineCode(60);
-
- void *NewIndirectBlock(long size) GXInlineCode(17);
- long GetIndirectBlockSize(const void *block) GXInlineCode(18);
- void *SetIndirectBlockSize(void *block, long newSize) GXInlineCode(19);
- void *RecoverIndirectBlock(const void *block) GXInlineCode(20);
- long ReleaseIndirectBlock(void *object) GXInlineCode(61);
- long DisposeIndirectBlock(void *block) GXInlineCode(21);
- void ExchangeIndirectBlocks(void *block1, void *block2) GXInlineCode(22);
- boolean IsMasterPointer(const void *source) GXInlineCode(23);
-
- #if defined(appleInternal) && !defined(debugging)
- #define GetBlockBusy(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
- #define GetBlockFlags(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->flags
- #define GetBlockParent(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->parent
- #define GetBlockType(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->typeID
-
- #define xSetBlockBusy(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount = y
- #define SetBlockFlags(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->flags = y
- #define SetBlockParent(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->parent = y
- #define SetBlockType(x, y) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->typeID = y
-
- #define GetBlockDelta(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->delta
- #define GetBlockPhysicalSize(x) ((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->size
-
- #define IncrementBlockBusy(x) ++((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
- #define DecrementBlockBusy(x) --((dirBlock *) ((char *) (x) - offsetField(dirBlock, data)))->busyCount
- #else
- long GetBlockBusy(const void *block) GXInlineCode(24);
- long GetBlockFlags(const void *block) GXInlineCode(25);
- void *GetBlockParent(const void *block) GXInlineCode(26);
- long GetBlockType(const void *block) GXInlineCode(27);
-
- #ifdef appleInternal
- void xSetBlockBusy(void *block, long busyCount) GXInlineCode(28);
- #else
- void SetBlockBusy(void *block, long busyCount) GXInlineCode(28);
- #endif
- void SetBlockFlags(void *block, long newFlags) GXInlineCode(29);
- void SetBlockParent(void *block, void *parent) GXInlineCode(30);
- void SetBlockType(void *block, long newTypeID) GXInlineCode(31);
-
- long GetBlockDelta(const void *block) GXInlineCode(32);
- long GetBlockPhysicalSize(const void *block) GXInlineCode(33);
-
- void IncrementBlockBusy(void *block) GXInlineCode(34);
- void DecrementBlockBusy(void *block) GXInlineCode(35);
- #endif
-
- void *NewTemporaryBlock(long size) GXInlineCode(36);
- void DisposeTemporaryBlock(void *block) GXInlineCode(37);
-
- long GetBlockBytes(const void *block, long index, long count, void *destination) GXInlineCode(39);
- void *SetBlockBytes(void *block, long index, long oldCount, long newCount, const void *source) GXInlineCode(40);
-
- gxHeap *FindHeap(const void *address) GXInlineCode(41);
- void *FindBlock(const void *address) GXInlineCode(42);
-
- void MoveBytes(const void *source, void *destination, long length) GXInlineCode(43);
- void CopyBytes(const void *source, void *destination, long length) GXInlineCode(44);
- void FillBytes(void *destination, long length, long pattern) GXInlineCode(45);
- boolean EqualBytes(const void *address1, const void *address2, long length) GXInlineCode(46);
-
- void MoveBits(const void *src, long srcInset, void *dst, long dstInset, long length) GXInlineCode(47);
- void FillBits(void *dst, long dstInset, long length, long pattern) GXInlineCode(48);
-
- void InitializeMemoryManager(void) GXInlineCode(58);
-
- #ifdef appleInternal
- gxHeap **GetFirstHeapPtr(void) GXInlineCode(59);
- gxHeap **GetFirstHeapPartPtr(void) GXInlineCode(69);
-
- /* IMPORTANT: don’t add any functions after this except for GetMemoryTrapAddress */
- #ifdef insideStartup
- #undef GXInlineCode
- #define GXInlineCode(x) = {0x7000 + (x), 0xA832}
- #endif
- #endif
-
- void *GetMemoryTrapAddress(long selector) GXInlineCode(57);
-
- #ifdef __cplusplus
- }
- #endif
-
- #undef GXInlineCode
-
- #endif
-